//Source file: D:\\Users\\afpa\\Documents\\workspace\\20-otarie\\src\\fr.afpa.biblio.metier\\Utilisateur.java

package fr.afpa.biblio.metier;

import java.util.ArrayList;
import fr.afpa.util.*;

/**
 * @author pev Classe qui décrit les utilisateurs de la bibliotheque 
 * @version 1.0
 */
public class Utilisateur extends Personne {

	/** Identifiant unique de l'utilisateur */
	private int idUtilisateur;

	/** Mot de passe de l'utilisateur */
	private String pwd;

	private String pseudonyme;

	/** Liste des emprunts */
	private ArrayList<EmpruntEnCours> empruntEnCours;
	

	/**
	 * Constructeur complet de la classe.
	 * 
	 * @param _idUtilisateur
	 *            : id unique du user.
	 * @param _pwd
	 *            : le mot de passe.
	 * @param _pseudonyme
	 * @param _empruntEnCours
	 *            : ArrayList contenant les emprunts du user.
	 * @throws BiblioExeception
	 *             si _idUtilisateur <1
	 * @throws InstantiationException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 * @throws IllegalAccessException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 */
	public Utilisateur(int _idUtilisateur, String _pwd, String _pseudonyme,
			ArrayList<EmpruntEnCours> _empruntEnCours) throws BiblioExeception,
			InstantiationException, IllegalAccessException {
		if (_idUtilisateur >= 0)
			this.idUtilisateur = _idUtilisateur;
		else
			throw new BiblioExeception("L'Id de l'utilisateur doit etre > 0");

		this.pwd = Utils.nullSwap(_pwd, String.class);

		this.pseudonyme = (_pseudonyme == null) ? _pseudonyme : "";
		;
		this.empruntEnCours = (_empruntEnCours == null) ? _empruntEnCours
				: new ArrayList<EmpruntEnCours>();
	}

	/**
	 * Constructeur ou empruntEnCours prend la valeur par défaut de new
	 * ArrayList<EmpruntEnCours>().
	 * 
	 * @param _idUtilisateur
	 *            : id unique du user.
	 * @param _pwd
	 *            : le mot de passe.
	 * @param _pseudonyme
	 * @throws BiblioExeception
	 *             si _idUtilisateur <1
	 * @throws InstantiationException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 * @throws IllegalAccessException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 */
	public Utilisateur(int _idUtilisateur, String _pwd, String _pseudonyme)
			throws InstantiationException, IllegalAccessException,
			BiblioExeception {
		this(_idUtilisateur, _pwd, _pseudonyme, new ArrayList<EmpruntEnCours>());
	}

	/**
	 * Constructeur ou empruntEnCours prend la valeur par défaut de new
	 * ArrayList<EmpruntEnCours>(),
	 * <p>
	 * idUtilisateur est initialisé a 1.
	 * <p>
	 * 
	 * @param _pwd
	 *            : le mot de passe.
	 * @param _pseudonyme
	 * @throws BiblioExeception
	 *             si _idUtilisateur <1
	 * @throws InstantiationException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 * @throws IllegalAccessException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 */
	public Utilisateur(String _pwd, String _pseudonyme)
			throws InstantiationException, IllegalAccessException,
			BiblioExeception {
		this(1, _pwd, _pseudonyme, new ArrayList<EmpruntEnCours>());
		// _RQ Quid de l id dans ce constructeur faut il faire un compteu ici ?
	}

	/**
	 * Constructeur ou empruntEnCours prend la valeur par défaut de new
	 * ArrayList<EmpruntEnCours>(),
	 * <p>
	 * idUtilisateur est initialisé avec un compteur.
	 * <p>
	 * pwd est mis à "".
	 * 
	 * @param _pseudonyme
	 * @throws BiblioExeception
	 *             si _idUtilisateur <1
	 * @throws InstantiationException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 * @throws IllegalAccessException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 */
	public Utilisateur(String _pseudonyme) throws InstantiationException,
			IllegalAccessException, BiblioExeception {
		this("", _pseudonyme);
	}

	/**
	 * Constructeur ou empruntEnCours prend la valeur par défaut de new
	 * ArrayList<EmpruntEnCours>(),
	 * <p>
	 * idUtilisateur est initialisé avec un compteur.
	 * <p>
	 * pwd est mis à "" et le pseudonyme devient "";
	 * 
	 * @throws BiblioExeception
	 *             si _idUtilisateur <1
	 * @throws InstantiationException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 * @throws IllegalAccessException
	 *             , voir : {@link java.lang.Class#newInstance()
	 *             java.lang.Class.newInstance()}.
	 * @roseuid 5240E3CF00ED
	 */
	public Utilisateur() throws InstantiationException, IllegalAccessException,
			BiblioExeception {
		this("");
	}

	/**
	 * @param _ep
	 *            un empruntEnCours a ajouter a la liste de l'utilisateur
	 * @return true si l'ajout s'est bien passé
	 * @roseuid 5240D7E001F3
	 */
	public boolean addEmpruntEnCours(EmpruntEnCours _ep) {
		// _RQ Changé retour de void a boolean pour refleter succes/echec de
		// l'action

		if (_ep != null)
			return this.empruntEnCours.add(_ep);

		return false;
	}

	/**
	 * @return EmpruntEnCours
	 * @roseuid 5240D80001A9
	 */
	public ArrayList<EmpruntEnCours> getEmpruntEnCours() {
		return this.empruntEnCours;
	}

	/**
	 * @return int
	 * @roseuid 5240D84F026B
	 */
	public int getNbEmpruntEnCours() { // TODO Coder
		return this.empruntEnCours.size();
	}

	
}
